מבני נתונים. אחרי שלב זה המשיכו והריצו את מיון מהיר על המערך. תארו את כל שלבי הרקורסיה, אך עתה אין צורך להיכנס לתיאור הריצה של.

Σχετικά έγγραφα
פתרון תרגיל מרחבים וקטורים. x = s t ולכן. ur uur נסמן, ur uur לכן U הוא. ur uur. ur uur

תרגיל 13 משפטי רול ולגראנז הערות

תרגול 1 חזרה טורי פורייה והתמרות אינטגרליות חורף תשע"ב זהויות טריגונומטריות

יסודות לוגיקה ותורת הקבוצות למערכות מידע (סמסטר ב 2012)

פתרון תרגיל 5 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד

= 2. + sin(240 ) = = 3 ( tan(α) = 5 2 = sin(α) = sin(α) = 5. os(α) = + c ot(α) = π)) sin( 60 ) sin( 60 ) sin(

חורף תש''ע פתרון בחינה סופית מועד א'

gcd 24,15 = 3 3 =

מבני נתונים. (ב) ואז הוא הופך למערך המייצג את האינדקס האחרי אחרון של כל מספר: c

פתרון תרגיל 8. מרחבים וקטורים פרישה, תלות \ אי-תלות לינארית, בסיס ומימד ... ( ) ( ) ( ) = L. uuruuruur. { v,v,v ( ) ( ) ( ) ( )

משוואות רקורסיביות רקורסיה זו משוואה או אי שוויון אשר מתארת פונקציה בעזרת ערכי הפונקציה על ארגומנטים קטנים. למשל: יונתן יניב, דוד וייץ

תרגול פעולות מומצאות 3

[ ] Observability, Controllability תרגול 6. ( t) t t קונטרולבילית H למימדים!!) והאובז' דוגמא: x. נשתמש בעובדה ש ) SS rank( S) = rank( עבור מטריצה m

סיכום- בעיות מינימוםמקסימום - שאלון 806

סדרות - תרגילים הכנה לבגרות 5 יח"ל

ניתוח סיבוכיות - פונקציות רקורסיביות פיתוח טלסקופי

מתכנס בהחלט אם n n=1 a. k=m. k=m a k n n שקטן מאפסילון. אם קח, ניקח את ה- N שאנחנו. sin 2n מתכנס משום ש- n=1 n. ( 1) n 1

השאלות..h(k) = k mod m

אלגברה מודרנית פתרון שיעורי בית 6

( )( ) ( ) f : B C היא פונקציה חח"ע ועל מכיוון שהיא מוגדרת ע"י. מכיוון ש f היא פונקציהאז )) 2 ( ( = ) ( ( )) היא פונקציה חח"ע אז ועל פי הגדרת

ל הזכויות שמורות לדפנה וסטרייך

לוגיקה ותורת הקבוצות פתרון תרגיל בית 8 חורף תשע"ו ( ) ... חלק ראשון: שאלות שאינן להגשה נפריד למקרים:

תרגיל 7 פונקציות טריגונומטריות הערות

מבני נתונים 08a תרגול 8 14/2/2008 המשך ערמות ליאור שפירא

פרק 13 רקורסיה רקורסיה רקורסיה רקורסיות פשוטות: חישוב עצרת. תמונת המחסנית ב-() factorial רקורסיות פשוטות: פיבונאצ'י

שאלה 1 V AB פתרון AB 30 R3 20 R

(2) מיונים השאלות. .0 left right n 1. void Sort(int A[], int left, int right) { int p;

תכנון אלגוריתמים 2016 עבודה 1 שאלה 1 פתרון נתונות שתי בעיות. יש למצוא: אורך מסלול קצר ביותר המתחיל באחד מן הקודקודים s 1,..., s k ומסתיים ב t.

brookal/logic.html לוגיקה מתמטית תרגיל אלון ברוק

s ק"מ קמ"ש מ - A A מ - מ - 5 p vp v=

אלגברה ליניארית (1) - תרגיל 6

תוכן הפרק: ,best case, average case דוגמאות 1. זמן - נמדד באמצעות מס' פעולות סיבוכיות, דוגמאות, שיפור בפקטור קבוע האלגוריתם. וגודלם. איטרטיביים. לקלט.

מיונים א': מיון (Sorting) HeapSort. QuickSort תור עדיפויות / ערימה

שדות תזכורת: פולינום ממעלה 2 או 3 מעל שדה הוא פריק אם ורק אם יש לו שורש בשדה. שקיימים 5 מספרים שלמים שונים , ראשוני. שעבורם

פתרון תרגיל בית 6 מבוא לתורת החבורות סמסטר א תשע ז

דף פתרונות 7 נושא: תחשיב הפסוקים: צורה דיסיונקטיבית נורמלית, מערכת קשרים שלמה, עקביות

מיון. 1 מיון ערימה (Heapsort) חלק I 1.1 הגדרת ערימה 0.1 הגדרה של המושג מיון מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!

Logic and Set Theory for Comp. Sci.

חידה לחימום. כתבו תכappleית מחשב, המקבלת כקלט את M ו- N, מחליטה האם ברצוappleה להיות השחקן הפותח או השחקן השappleי, ותשחק כך שהיא תappleצח תמיד.

תרגול משפט הדיברגנץ. D תחום חסום וסגור בעל שפה חלקה למדי D, ותהי F פו' וקטורית :F, R n R n אזי: נוסחת גרין I: הוכחה: F = u v כאשר u פו' סקלרית:

תורת הגרפים - סימונים

מבוא למדעי המחשב מבוא למדעי המחשב מ' - תירגול 14

מבחן מועד ב' בהצלחה! אנא קיראו היטב את ההוראות שלהלן: ודאו כי כל עמודי הבחינה נמצאים בידכם.

מבני נתונים ויעילות אלגוריתמים

מבני נתונים הגבלת אחריות פרק - 1 אלגוריתמי מיון ואנליזה אסימפטוטית. מיון בועות Sort Bubble מאת : סשה גולדשטיין,

אלגברה ליניארית 1 א' פתרון 2

מבני נתונים מבחן מועד ב' סמסטר חורף תשס"ו

מבני נתונים מבחן מועד א' סמסטר אביב תשס"ו

ניהול תמיכה מערכות שלבים: DFfactor=a-1 DFt=an-1 DFeror=a(n-1) (סכום _ הנתונים ( (מספר _ חזרות ( (מספר _ רמות ( (סכום _ ריבועי _ כל _ הנתונים (

3-9 - a < x < a, a < x < a

לדוגמה: במפורט: x C. ,a,7 ו- 13. כלומר בקיצור

החשמלי השדה הקדמה: (אדום) הוא גוף הטעון במטען q, כאשר גוף B, נכנס אל תוך התחום בו השדה משפיע, השדה מפעיל עליו כוח.

TECHNION - ISRAEL INSTITUTE OF TECHNOLOGY DEPARTMENT OF COMPUTER SCIENCE סמסטר אביב תשס"ו מס' סטודנט:

מבני נתונים ואלגוריתמים תרגול #11

תרגול מס' 6 פתרון מערכת משוואות ליניארית

פתרון תרגיל 6 ממשוואות למבנים אלגברה למדעי ההוראה.

בחינה בסיבוכיות עמר ברקמן, ישי חביב מדבקית ברקוד

{ : Halts on every input}

מבני נתונים ויעילות אלגוריתמים

סיכום חקירת משוואות מהמעלה הראשונה ומהמעלה השנייה פרק זה הינו חלק מסיכום כולל לשאלון 005 שנכתב על-ידי מאיר בכור

צעד ראשון להצטיינות מבוא: קבוצות מיוחדות של מספרים ממשיים

לוגיקה ותורת הקבוצות פתרון תרגיל בית 4 אביב תשע"ו (2016)

הגדרה: קבוצת פעילויות חוקית היא קבוצה בה כל שתי פעילויות

מתמטיקה בדידה תרגול מס' 12

TECHNION Israel Institute of Technology, Faculty of Mechanical Engineering מבוא לבקרה (034040) גליון תרגילי בית מס 5 ציור 1: דיאגרמת הבלוקים

גמישויות. x p Δ p x נקודתית. 1,1

מבני נתונים אדמיניסטרציה ד"ר אלכס סמורודניצקי, רוס 210, שני 5:30 4:15. ציון:

תשובות מלאות לבחינת הבגרות במתמטיקה מועד חורף תשע"א, מיום 31/1/2011 שאלון: מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן.

מתמטיקה בדידה תרגול מס' 5

מתמטיקה בדידה תרגול מס' 2

אלגוריתמים 1, סמסטר אביב 2017

תאריך הבחינה: שם המרצה: רפי כהן שם המתרגל: יסודות מבני נתונים שם הקורס:

אוסף שאלות מס. 3 פתרונות

קיום ויחידות פתרונות למשוואות דיפרנציאליות

מבני נתונים מדעי המחשב שאלון: מועד ב' תשע"ו מדעי המחשב פתרון בחינת הבגרות. Java שאלה 1. blog.csit.org.

תאריך עדכון אחרון: 27 בפברואר ניתוח לשיעורין analysis) (amortized הוא טכניקה לניתוח זמן ריצה לסדרת פעולות, אשר מאפשר קבלת

תורת הקבוצות תרגיל בית 2 פתרונות

הסתברות שבתחנה יש 0 מוניות ו- 0 נוסעים. הסתברות שבתחנה יש k-t נוסעים ו- 0 מוניות. λ λ λ λ λ λ λ λ P...

פתרונות , כך שאי השוויון המבוקש הוא ברור מאליו ולכן גם קודמו תקף ובכך מוכחת המונוטוניות העולה של הסדרה הנתונה.

co ארזים 3 במרץ 2016

חידה לחימום. כתבו תכנית שהקלט שלה הוא מספר שלם n,

אלגוריתמים ללכסון מטריצות ואופרטורים

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 315, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן

תכנון דינאמי. , p p p והמטריצה המתקבלת היא בגודל

כלליים זמן: S מחסנית, top(s) ראש המחסנית. (Depth First Search) For each unmarked DFS(v) / BFS(v) רקורסיבי. אלגוריתם :BFS

c ארזים 26 בינואר משפט ברנסייד פתירה. Cl (z) = G / Cent (z) = q b r 2 הצגות ממשיות V = V 0 R C אזי מקבלים הצגה מרוכבת G GL R (V 0 ) GL C (V )

אלגברה לינארית (1) - פתרון תרגיל 11

Charles Augustin COULOMB ( ) קולון חוק = K F E המרחק סטט-קולון.

פתרון תרגיל 4 יסודות מבני נתונים סמסטר א' תשע"ה שאלה 1:

טענה חשובה : העתקה לינארית הינה חד חד ערכית האפס ב- הוא הוקטור היחיד שמועתק לוקטור אפס של. נקבל מחד חד הערכיות כי בהכרח.

מתרגלת: שירה גילת סמסטר א 2017 תשע"ז

I. גבולות. x 0. מתקיים L < ε. lim אם ורק אם. ( x) = 1. lim = 1. lim. x x ( ) הפונקציה נגזרות Δ 0. x Δx

אינפי - 1 תרגול בינואר 2012

תרגול מס' 1 3 בנובמבר 2012

תרגילים באמצעות Q. תרגיל 2 CD,BF,AE הם גבהים במשולש .ABC הקטעים. ABC D נמצאת על המעגל בין A ל- C כך ש-. AD BF ABC FME

גבול ורציפות של פונקציה סקלרית שאלות נוספות

שיעור 1. זוויות צמודות

אלגברה א' - פתרונות לשיעורי הבית סמסטר חורף תשס"ט

"קשר-חם" : לקידום שיפור וריענון החינוך המתמטי

פתרון תרגיל דוגמא מרחב המדגם הוא כל הקומבינציות של 20 חודשי הולדת. לכל ילד 12 אפשרויות,לכן. לכן -

Transcript:

מבני נתונים תרגיל 2 פתרונות מיון מהיר 1. הריצו את השיטה partition על המערך הבא. הראו את שלבי הריצה השונים. 6, 10, 20, 4, 2, 15, 5, 99, 12, 1 אחרי שלב זה המשיכו והריצו את מיון מהיר על המערך. תארו את כל שלבי הרקורסיה, אך עתה אין צורך להיכנס לתיאור הריצה של.partition בתאור מסומנים p ו q בכל שלב אחרי החלפה ראשונה: 6, 1 p, 20, 4, 2, 15, 5, 99, 12, 10 q אחרי שנייה: 6, 1, 5 p, 4, 2, 15, 20 q, 99, 12, 10 ואז q זז: 6, 1, 5 p, 4, 2 q, 15, 20, 99, 12, 10 ואז p: 6, 1, 5, 4, 2 q,p, 15, 20, 99, 12, 10 לבסוף מתבצעת ההחלפה עם ה :pivot 2, 1, 5, 4, 6, 15, 20, 99, 12, 10 ומוחזר המיקום של 6. עתה ניכנס לתיאור הריצה של מיון מהיר: (א) הוא רץ על צד שמאל:.2, 1, 5, 4 partition יתן: 1, 2, 5, 4 ואז i. צד ימין יחזור מיד כי גודל הקטע הוא 1. 1

.ii צד שמאל יריץ partition ונקבל:,4. 5 מיד. ואז שתי הרקורסיות יחזרו (ב) עכשיו על צד ימין:.15, 20, 99, 12, 10 partition יתן:.12, 10, 15, 99, 20 ואז הרקורסיות: i. צד שמאל, partition יתן,10 12 ושתי הרקורסיות שלו יחזרו מייד..ii בצד ימין, partition יתן,20 99 ושתי הרקורסיות של יחזרו גם מייד. סך הכל נקבל את המערך ממוין: 1, 2 2, 4, 5 3, 6 1, 10, 12 3, 15 2, 20, 99 3 כאשר סימנתי את כל מי שהיה pivot ומעליו את עומק הרקורסיה בה הוא תיפקד ככזה. 2. נבחן את הקוד של הפונקציה :partition 1 int partition(int a[], int l, int r) 2 { 3 int pivot = a[l]; 4 int p = l; 5 int q = r; 6 7 while(p < q) 8 { 9 while(a[q] > pivot && p < q) q--; 10 while(a[p] <= pivot && p < q) p++; 11 12 swap(a, p, q); 13 14 swap(a, l, p); 15 return p; 16 בכל סעיף מוצע שינוי לקוד של הפונקציה. בדקו לכל שינוי האם הוא משפיע על נכונות הפונקציה. אם הפונקציה נשארת נכונה נסו להסביר מדוע, ואם לא תנו דוגמאת הרצה קטנה בה הפונקציה החדשה אינה נכונה. (א) הורדת התנאי p < q בשורה 9. הפונקציה תמשיך לעבוד נכון. נשים לב שתמיד בזמן התנועה של p q, נמצא על מישהו שהוא קטן שווה מהפיבוט בהתחלה זה כך כי הוא על הפיבוט עצמו, ואחרי זה, תמיד ה swap יגרום לזה שוב. 2

לכן, אף פעם q לא יכול לעבור אותו ולכן אין צורך בתנאי. (ב) הורדת התנאי p < q בשורה 10. פה זה לא יעבוד, וזה למשל בדוגמא בה כל המספרים במערך קטנים מהפיבוט. (ג) שינוי שורה 4: int p = l+1 זה נראה הגיוני, הרי אין טעם לבדוק את הפיבוט עצמו. אבל הבעיה יכולה לקרות בחילוף האחרון של שורה 14. זה יקרה אם כל המספרים במערך גדולים מהפיבוט. אז נצא מהלולאה כש + 1 l p = q = ואז החילוף האחרון יהיה לא טוב. (ד) הוספת שתי שורות אחרי שורה 12: p++ q-- ערמות זה נשמע רעיון טוב כי ברור שאחרי החילוף אפשר כבר לזוז קדימה בשני המונים שלנו. נוצרת רק בעיה במקרי קצה. למשל במערך הבא: 20, 30, 10 30 ו 10 מתחלפים ואז p נהיה 2, והחילוף האחרון יכניס את הפיבוט במקום הלא נכון. אפשר לפתור את זה ואולי אפילו זה שווה מבחינת זמן ריצה. 1. נתון המערך הבא: 10, 5, 20, 4, 3, 7, 19, 2, 1, 40, 30, 14, 12 (א) הריצו את buildheap על המערך. (ב) הוציאו את שורש הערמה ותקנו אותה קחו את העלה האחרון ושימו אותו בשורש ואז תקנו. (ג) חזרו על הסעיף האחרון שוב פעם. 3

(א) לאחר buildheap של השכבה התחתונה 19) (4, 3, 7, : 10, 5, 20, 4, 40, 14, 19, 2, 1, 3, 30, 7, 12 לאחר שכבה שנייה (20,5): 10, 40, 20, 4, 30, 14, 19, 2, 1, 3, 5, 7, 12 ואז השורש: 40, 30, 20, 4, 10, 14, 19, 2, 1, 3, 5, 7, 12 (ב) קודם נשים את העלה בשורש: 12, 30, 20, 4, 10, 14, 19, 2, 1, 3, 5, 7 ואז נפעפע מטה: 30, 12, 20, 4, 10, 14, 19, 2, 1, 3, 5, 7 (ג) קודם נשים את העלה בשורש: 7, 12, 20, 4, 10, 14, 19, 2, 1, 3, 5 ואז נפעפע מטה: 20, 12, 19, 4, 10, 14, 7, 2, 1, 3, 5 4 2. (א) תארו מערך בן 7 תאים עליו buildheap תרוץ את הזמן המקסימלי האפשרי. המערך יהיה: 1, 2, 3, 4, 5, 6, 7 כל אבר חדש שאנו מגיעים אליו קטן מכל קודמיו ולכן יאלץ לפעפע כל הדרך למטה. כך: 3 יוחלף עם 2 7, יוחלף עם 5, ואז 1 יוחלף עם 7 ואז עם 6 (ב) הכלילו את הדוגמא שמצאתם בסעיף הקודם למערך בן n תאים, ותנו מקרה בו זמן הריצה של buildheap הוא מקסימלי. אם ניקח מערך שממוין מהקטן לגדול, אז בכל שלב אנו נתקלים במספר שקטן מכל אלה מתחתיו ולכן יאלץ לפעפע כל הדרך למטה. זמן הריצה לכן יהיה מקסימלי.

(ג) תנו דוגמא למערך בן n תאים, עליו תרוץ buildheap את הזמן המינימלי. אם ניקח מערך שהוא כבר ממוין בסדר יורד, אז בכל שלב, ל heapify אין עבודה לעשות, ולכן הריצה תסתיים בסריקת המערך בלבד, ללא החלפות. 3. כתבו גרסא חדשה ל buildheap העובדת הפוך, היא מתחילה מלמעלה ויורדת כלפי מטה. כלומר היא מתחילה מערמה ריקה וכל פעם מוסיפה עוד אבר, שמה אותו בתור העלה האחרון, ואז מפעפעת אותו למעלה. נתחו את זמן הריצה של השיטה שכתבתם התמקדו במקרה שהעץ הוא בינארי מלא. שימו לב בעיקר לתרומה של השכבה התחתונה ביותר בעץ. נשתמש בשיטה שראינו בכיתה: void addelement(int[] a, int n, int new) { int p = n+1; while(p!= 1 && a[p/2] < new) { a[p] = a[p/2]; p = p/2; a[p] = new; void buildheap2(int[] a) { for (int n = 1; n < a.length; n++) addelement(a, n, a[n+1]); זכרו שהמערכים שלנו הולכים מאינדקס 1 ועד אינדקס,a.length כולל האחרון. מבחינת זמן הריצה, הראנו כבר שכל קריאה ל addelement לוקחת (n,o(log ולכן סך הכל זמן הריצה הוא (n.o(n log הפעם לא ניתן לשפר את חישוב זמן הריצה, וזה כי אם נסתכל על השכבה האחרונה, יש שם חצי מהקודקודים וכל אחד יכול בהחלט לפעפע כל הדרך למעלה חישבו על מערך ממוין בסדר עולה. לכן רק שכבה זאת תתרום = (n )Ω 1 2n log.θ(n log n) ומכאן שזמן הריצה הוא באמת Ω(n log n) 5

4. תכננו ערמה בה לכל קודקוד יש שלושה ילדים. תארו היכן נמצאים ילדיו של כל קודקוד, תארו ערמה לדוגמא עם 15 קודקודים, וכיתבו את השיטה.heapify מה יהיה עומק העץ במקרה של ערמה עם n קודקודים? 90, 10, 40, 20, 7, 4, 8, 30, 20, 6, 1, 10, 13, 6, 2 void heapify(int[] a, int i, int n) { while(true) { ערמה לדוגמא: ילדיו של קודקוד יהיו במקומות + 1 3i 3i 1, 3i, int max = i; // max is actually an index. if (3*i - 1 <= n && a[3*i - 1] > a[max]) max = 3*i - 1; if (3*i <= n && a[3*i] > a[max]) max = 3*i; if (3*i + 1 <= n && a[3*i + 1) > a[max]) max = 3*i + 1; if (max == i) return swap(a, i, max); i = max; עומק העץ יהיה (n).log 3 5. נתון מערך לא ממוין בעל n מספרים. עליכם למצוא את k המספרים הקטנים ביותר במערך. אלגוריתם פשוט יעבור k פעמים על המערך וימצא כל פעם מינימום וימחוק אותו. אלגוריתם זה יקח (k O(n זמן. אלגוריתם אחר הוא למיין את המערך ואז לקחת את k המספרים התחתונים. אלגוריתם זה יקח (n O(n log זמן. השתמשו בערמה ומצאו אלגוריתם יותר יעיל משניהם, הרץ בזמן (n.o(n+k log 6

נהפוך את כל המערך שלנו לערמה זה לוקח O(n) זמן. אבל הערמה שנבנה היא הפוכה למה שראינו בשיעור, כלומר המינימום הוא בשורש. נוציא את השורש ונכתוב בצד ואז נתקן את הערמה כרגיל, ניקח את העלה האחרון, נשים בשורש ונריץ.Heapify זה יקח.O(log(n)) נמשיך ככה k פעמים ונקבל את k האברים הכי קטנים. buildheap(a, n); for(i=0; i<k; i++) { print a[1]; a[1] = a[n]; n--; heapify(a, 1, n); זמן הריצה הוא log(n)).o(n + k 7